今天要進入到onDraw的部分,通過使用onDraw可以讓我們的圖像是可變動的,像是可以畫出一條波形圖再依據其他元件來影響圖像的顯示,或是一般的圖形也可以使用onDraw來達成,下面會先說明onDraw的基本使用過程。
開始使用onDraw首先開一個新的class並繼承View。
public class MyView extends View {
    public MyView(Context context) {
        super(context);
    }
}
接下來先來畫出幾個基本的圖形,在這之前要先新增畫筆,通過畫筆可以決定繪出的圖形顏色、粗細等等。
public class MyView extends View {
    private Paint paint;
    public MyView(Context context) {
        super(context);
        paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStrokeWidth(10);
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.FILL);
    }
}
完成後按下ctrl+o鍵來叫出onDraw後便可以開始來畫一些東西出來。
public class MyView extends View {
    private Paint paint;
    public MyView(Context context) {
        super(context);
        paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStrokeWidth(10);
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.FILL);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //直線
        canvas.drawLine(50, 50, 150, 50, paint);
    }
}
//矩形
canvas.drawRect(0,0,200,200,paint);
//圓形
canvas.drawCircle(200,200,100,paint);
最後還有波型的部分,需要使用Path來完成。
public class MyView extends View {
    private Paint paint;
    private Path path;
    public MyView(Context context) {
        super(context);
        paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStrokeWidth(10);
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.FILL);
        path = new Path();
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        path.moveTo(100, 100);
        path.quadTo(300, 300, 500, 100);
        canvas.drawPath(path, paint);
    }
}